/**
  ******************************************************************************
  * @file    debug.h
  * @author  Garen
  * @version V1.0.0
  * @date    2018-10-08
  * @brief   debug.c文件对应的头文件，函数声明.结构体定义等作用
  ******************************************************************************
  */
#ifndef __DEBUG_H
#define __DEBUG_H

#ifdef __cplusplus
extern "C"
{
#endif
int get_debug_level(void);
/* Define to prevent recursive inclusion -------------------------------------*/
#define TRUE 1
#define FALSE 0
#define OK 0
#define ERROR -1
/* 调试打印 */
#define DEBUG_NONE 0   // 不输出调试打印信息
#define DEBUG_ERROR 1  // 输出错误信息
#define DEBUG_WARN 2   // 输出警告信息
#define DEBUG_NOTICE 3 // 输出一般低频调试信息
#define DEBUG_INFO 4   // 输出一般高频调试信息
//调试打印函数
#define DEBUG_PRINT(level, fmt, args...)                                           \
    do                                                                             \
    {                                                                              \
        if (level <= get_debug_level())                                            \
        {                                                                          \
            if (DEBUG_ERROR == level)                                              \
            {                                                                      \
                printf("[%s][%s][%d]" fmt, "ERROR", __FILE__, __LINE__, ##args);   \
            }                                                                      \
            else if (DEBUG_WARN == level)                                          \
            {                                                                      \
                printf("[%s][%s][%d]" fmt, "WARNING", __FILE__, __LINE__, ##args); \
            }                                                                      \
            else if (DEBUG_NOTICE == level)                                        \
            {                                                                      \
                printf("[%s][%s][%d]" fmt, "NOTICE", __FILE__, __LINE__, ##args);  \
            }                                                                      \
            else if (DEBUG_INFO == level)                                          \
            {                                                                      \
                printf("[%s][%s][%d]" fmt, "INFO", __FILE__, __LINE__, ##args);    \
            }                                                                      \
        }                                                                          \
    } while (0)
/* Includes ------------------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions prototypes----------------------------------------------*/
int get_debug_level(void);
void set_debug_level(int level) ;
void config_debug(int argc, char *argv[]);
#ifdef __cplusplus
}
#endif

#endif /*__DEBUG_H */